package com.sai.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sai.system.entity.SysDepart;
import com.sai.system.entity.SysUser;
import com.sai.common.api.vo.Result;
import com.sai.common.system.vo.SysUserCacheInfo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户表 服务类
 */
public interface ISysUserService extends IService<SysUser> {
	/**
	 * 查询登录用户信息
	 * @param
	 * @return
	 */
	SysUser getCurrentUserInfo();

	/**
	 * 查询登录用户关联的部门
	 * @param
	 * @return
	 */
	List<SysDepart> getCurrentUserDeparts();

	/**
	 * 登录用户部门切换
	 * @param orgCode
	 * @return
	 */
	SysUser updateCurrentUserDepart(String orgCode);

	/**
	 * 分页查询用户列表
	 * @param user
	 * @param pageNo
	 * @param pageSize
	 * @param parameterMap
	 * @return
	 */
	IPage<SysUser> pageUser (SysUser user, Integer pageNo, Integer pageSize, Map<String, String[]> parameterMap);

	/**
	 * 查询用户列表
	 * @param user
	 * @param parameterMap
	 * @return
	 */
	List<SysUser> list (SysUser user, Map<String, String[]> parameterMap);

	/**
	 * 新增系统用户
	 * @param user
	 * @param selectedRoles
	 * @param selectedDeparts
	 * @return
	 */
	SysUser addUser(SysUser user, String selectedRoles, String selectedDeparts);

	/**
	 * 修改系统用户
	 * @param user
	 * @param selectedRoles
	 * @param selectedDeparts
	 * @return
	 */
	SysUser editUser(SysUser user, String selectedRoles, String selectedDeparts);

	/**
	 * 通过用户名获取用户角色集合
	 *
	 * @param username 用户名
	 * @return 角色集合
	 */
	Set<String> getUserRolesSet(String username);

	/**
	 * 通过用户名获取用户权限集合
	 *
	 * @param username 用户名
	 * @return 权限集合
	 */
	Set<String> getUserPermissionsSet(String username);

	/**
	 * 通过用户名查询用户信息
	 * @param username
	 * @return
	 */
	SysUser getUserByName(String username);

	/**
	 * 校验用户是否有效
	 * @param sysUser
	 * @return
	 */
	Result checkUserIsEffective(SysUser sysUser);

	/**
	 * 根据 userIds查询，查询用户所属部门的名称（多个部门名逗号隔开）
	 * @param
	 * @return
	 */
	Map<String,String> getDepNamesByUserIds(List<String> userIds);

	/**
	 * 添加用户和用户角色关系
	 * @param user
	 * @param roles
	 */
	void addUserWithRole(SysUser user,String roles);

	/**
	 * 添加用户和用户部门关系
	 * @param user
	 * @param selectedParts
	 */
	void addUserWithDepart(SysUser user, String selectedParts);

	/**
	 * 修改用户和用户角色关系
	 * @param user
	 * @param roles
	 */
	void editUserWithRole(SysUser user,String roles);

	/**
	 * 编辑用户和用户部门关系
	 * @param user
	 * @param departs
	 */
	void editUserWithDepart(SysUser user, String departs);

	/**
	 * 查询用户信息包括 部门信息
	 * @param username
	 * @return
	 */
	SysUserCacheInfo getCacheUser(String username);

	/**
	 * 指定用户部门切换
	 * @param username
	 * @param orgCode
	 */
	void updateUserDepart(String username,String orgCode);

}
